.TH std::locale::operator() 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::locale::operator() \- std::locale::operator()

.SH Synopsis
   template< class CharT, class Traits, class Alloc >

   bool operator()( const basic_string<CharT,Traits,Alloc>& s1,

                    const basic_string<CharT,Traits,Alloc>& s2 ) const;

   Compares two string arguments s1 and s2 according to the lexicographic comparison
   rules defined by this locale's std::collate<CharT> facet. This operator allows any
   locale object that has a collate facet to be used as a binary predicate in the
   standard algorithms (such as std::sort) and ordered containers (such as std::set).

.SH Parameters

   s1 - the first string to compare
   s2 - the second string to compare

.SH Return value

   true if s1 is lexicographically less than s2, false otherwise.

.SH Possible implementation

   template<class CharT, class Traits, class Alloc>
   bool operator()(const std::basic_string<CharT,Traits,Alloc>& s1,
                   const std::basic_string<CharT,Traits,Alloc>& s2) const;
   {
       return std::use_facet<std::collate<CharT>>(*this).compare(
                  s1.data(), s1.data() + s1.size(),
                  s2.data(), s2.data() + s2.size()) < 0;
   }

.SH Example

   A vector of strings can be sorted according to a non-default locale by using the
   locale object as comparator:


// Run this code

 #include <algorithm>
 #include <cassert>
 #include <locale>
 #include <string>
 #include <vector>

 int main()
 {
     std::vector<std::wstring> v = {L"жил", L"был", L"пёс"};
     std::sort(v.begin(), v.end(), std::locale("ru_RU.UTF8"));
     assert(v[0] == L"был");
     assert(v[1] == L"жил");
     assert(v[2] == L"пёс");
 }

.SH See also

   collate defines lexicographical comparison and hashing of strings
           \fI(class template)\fP
